// Loesung_von_Aufgabe_4.7_2_Massenspektrometer

/* Drei Isotope von unterschiedlicher Masse aber gleicher Geschwindigkeit in x-Richtung 
 durchfliegen ein Massenspektrometer. Die Werte für die Ladung, die Flußdichten und 
 die Massen wurden einfachheithalber recht groß gewählt. 
 Dadurch ergeben sich relativ große Flugbahnen im Teil 2 der Apparatur,
 wenn ein Pixel einem Meter entspricht */

float Q = 8; // Ladung der Isotope in Coulomb
float B1 = 2; // Magnetische Flußdichte im Teil 1 der Apparatur in Tesla
float B2 = 1; // Magnetische Flußdichte im Teil 2 der Apparatur in Tesla
float E = 4.0; // Elektrische Feldstärke im Teil 1 der Apparatur in V/m
float FE; // Elektrische Kraft im Teil 1 der Apparatur in Newton
float FL1; // Lorentzkraft im Teil 1 der Apparatur in Newton
float FL2; // Lorentzkraft im Teil 2 der Apparatur in Newton
float v = 2.0; // Geschwindigkeit der Isotope
float t; // Zeit
float m1 = 200; // Masse m1 in kg
float m2 = 250; // Masse m2 in kg
float m3 = 300; // Masse m3 in kg
int x; // x-Wert für die Isotope
float y1; // y-Wert für Isotop 1 im Teil 1 der Apparatur
float y2; // y-Wert für Isotop 2 im Teil 1 der Apparatur
float y3; // y-Wert für Isotop 3 im Teil 1 der Apparatur
float w; // Winkel
float r1; // Radius des Kreisbogens für Isotop 1 im Teil 2 der Apparatur
float r2; // Radius des Kreisbogens für Isotop 2 im Teil 2 der Apparatur
float r3; // Radius des Kreisbogens für Isotop 3 im Teil 2 der Apparatur


void setup() 
{
  size (600, 400);
}

void draw() 
{
  background(255);

  // Isotopenquelle wird gezeichnet
  fill(255, 155, 0);
  ellipse(10, 200, 20, 20); 

  // Die beiden Blenden werden gezeichnet
  fill(100);
  rect(25, 205, 10, 195);
  rect(25, 0, 10, 195); 
  rect(320, 205, 10, 195);
  rect(320, 0, 10, 195);

  // Die beiden Kondensatorplatten werden gezeichnet
  fill(255, 0, 0); // Die positive Platte ist rot
  rect(50, 10, 255, 20);
  fill(0, 0, 255); // Die negative Platte ist blau
  rect(50, 370, 255, 20);

  // Zeichen für die beiden B-Felder werden gezeichnet
  noFill();
  stroke(0, 255, 0);
  strokeWeight(3);
  ellipse(70, 70, 30, 30);
  line(60, 80, 80, 60);
  line(60, 60, 80, 80);
  ellipse(470, 70, 30, 30);
  line(460, 80, 480, 60);
  line(460, 60, 480, 80);
  fill(0, 255, 0);
  textSize(32);
  text("B1", 100, 80);
  text("B2", 500, 80);

  noStroke();

  // Die drei Isotope werden gezeichnet
  fill(255, 0, 0);
  ellipse(x+20, y1, 3, 3); 
  ellipse(x+20, y2, 6, 6);
  ellipse(x+20, y3, 9, 9);
  x++;

  // FE und FL werden berechnet.
  FE = Q*E;
  FL1 = Q*v*B1;


  if (x>35) 
  {
    y1 = 200 + ((FE-FL1)*t*t)/(2*m1);
    y2 = 200 + ((FE-FL1)*t*t)/(2*m2);
    y3 = 200 + ((FE-FL1)*t*t)/(2*m3);
    t = t + 0.1;
  }

  /* Isotop verschwindet, wenn es eine Kondensatorplatte oder 
   die rechte Blende berührt */
  if (y1 < 35 || y1 > 370 || (x>300 && y1<195) || (x>300 && y1>205)) 
  {
    x = 20;
    y1 = 200;
    y2 = 200;
    y3 = 200;
    t = 0.002;
  }
  if (y2 < 35 || y2 > 370 || (x>300 && y2<195) || (x>300 && y2>205)) 
  {
    x = 0;
    y2 = 200;
    t = 0.002;
  }
  if (y3 < 35 || y3 > 370 || (x>300 && y3<195) || (x>300 && y3>205)) 
  {
    x = 0;
    y3 = 200;
    t = 0.002;
  }

  // Die Kreisbögen im rechten Fensterteil werden gezeichnet
  if (x >= 305) 
  {
    x = 310;
    r1 = (m1*v)/(Q*B2);
    r2 = (m2*v)/(Q*B2);
    r3 = (m3*v)/(Q*B2);

    stroke(255, 0, 0);
    strokeWeight(2);
    noFill();
    arc(330, 200-r1, 2*r1, 2*r1, -radians(90), radians(90));
    arc(330, 200-r2, 2*r2, 2*r2, -radians(90), radians(90));
    arc(330, 200-r3, 2*r3, 2*r3, -radians(90), radians(90));

    noStroke();
  }
}